#pragma once

namespace SOUI {

    class UTILITIES_API SAutoBuf {
      public:
        SAutoBuf();
        SAutoBuf(size_t nElements);
        ~SAutoBuf();
        
        operator char *() const;
        char *operator ->() const;
        const char &operator[] (int i) const;
        char &operator[] (int i);
        void Attach(char *pBuf, size_t size);
        //return buffer, must be freed using soui_mem_wrapper::SouiFree
        char *Detach();
        char *Allocate(size_t nElements);
        size_t size();
        void Free();
      private:
        char *m_pBuf;
        size_t m_nSize;
        bool   m_bExternalBuf;
    };
    
}
